<?php
	/*	Класс path берет на себя всю рутину по 
	 * разруливанию путей к директориям - вложеным, переопределенным, и.т.д.
	 * 
	 * 
	 * так как в конфигах обычно указываются кучи относительных путей, достаточно переопределить их отправную точку 
	 * i.e. 'root', в классе path
	 * 
	 */
	
	define("_DRS", DIRECTORY_SEPARATOR);

	class path extends service {
		
		public function get_path($name){
			
		}
		
		public function get_core_root(){
			return dirname(__FILE__)._DRS."..";
		}
		
		//override me
		public function get_root(){
			$nfo_root = $this->get_core_root();
			
			//todo: get 'projects' dir from config;
			
			if ($project_name = context::get("project_mgr")->get_project()){
				$path = $nfo_root._DRS.".."._DRS.$project_name;
				
				return realpath($path);
			}else{
				#context::io()->debug("path::get_root() -> no project set, using /nfo2/ as root",IO_DEBUG_NOTICE);	//nothing wrong with it
				return realpath($nfo_root);
			}

		}
		
		//--------------------------------------------------------------
		//	Локатор для поддиректорий и файлов. Если указаный путь найден в подпроекте,
		//	вернуть абсолютный путь к нему.
		//	Если найден в базовом классе, то к базовому. Etcetra.
		//--------------------------------------------------------------
		
		public function locate($relpath){
			$root_path = $this->get_root();
			$core_path = $this->get_core_root();
			
			if (file_exists($root_path._DRS.$relpath)){
				return $root_path;
			}
			if (file_exists($core_path._DRS.$relpath)){
				return $core_path;
			}
			
			return false;
		}
		
		public function get_relpath($filepath, $ref_path){
			$__path = explode(DIRECTORY_SEPARATOR,realpath($filepath));
			$flag = false;
			$relpath = "/";
							
			foreach($__path as $dir){
				if ($dir == $ref_path){
					$flag = true;
						continue;
				}
								
				if ($flag){
					$relpath .= $dir."/";
				}
			}
			
			return $relpath;
		}
		
	}

?>
